﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using Acaweb.Common;
using System.ServiceModel.Activation;
using Acaweb.Model.Entities.DatosCompuestos;
using Acaweb.Model.Entities;
using Components = Acaweb.Componentes.Contracts;

namespace Acaweb.Servicios.Services
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class EgresadosService : Contracts.IEgresadosService
    {
        Components.IEgresadosService _EgresadoComponent = AppCtx.Resolve<Components.IEgresadosService>();

        public Egresados GetById(int Id)
        {
            return _EgresadoComponent.GetByCodigo(Id);
        }

        public void AddInformacionLaboral(HistorialLaboral HistorialLaboral)
        {
            if (IsAuthorize(HistorialLaboral.HistorialLaboralPk))
            {
                Acaweb.Componentes.Contracts.IHistorialLaboralService _HistorialLaboralComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHistorialLaboralService>();
                _HistorialLaboralComponent.Create(HistorialLaboral);
            }
        }

        public void AddInformacionAcademica(HistorialAcademico HistorialAcademico)
        {
            if (IsAuthorize(HistorialAcademico.HistorialAcademicoPk))
            {
                Acaweb.Componentes.Contracts.IHistorialAcademicoService _HistorialAcademicoComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHistorialAcademicoService>();
                _HistorialAcademicoComponent.Create(HistorialAcademico);
            }
        }

        public void EditInformacionLaboral(HistorialLaboral HistorialLaboral)
        {
            if (IsAuthorize(HistorialLaboral.HistorialLaboralPk))
            {
                Acaweb.Componentes.Contracts.IHistorialLaboralService _HistorialLaboralComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHistorialLaboralService>();
                _HistorialLaboralComponent.Update(HistorialLaboral);
            }
        }

        public void DeleteInformacionLaboral(HistorialLaboralPk HistorialLaboral)
        {
            if (IsAuthorize(HistorialLaboral))
            {
                Acaweb.Componentes.Contracts.IHistorialLaboralService _HistorialLaboralComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHistorialLaboralService>();
                _HistorialLaboralComponent.Delete(HistorialLaboral);
            }
        }

        public void EditInformacionAcademica(HistorialAcademico HistorialAcademico)
        {
            if (IsAuthorize(HistorialAcademico.HistorialAcademicoPk))
            {
                Acaweb.Componentes.Contracts.IHistorialAcademicoService _HistorialAcademicoComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHistorialAcademicoService>();
                _HistorialAcademicoComponent.Update(HistorialAcademico);
            }
        }

        public void DeleteInformacionAcademica(HistorialAcademicoPk HistorialAcademico)
        {
            if (IsAuthorize(HistorialAcademico))
            {
                Acaweb.Componentes.Contracts.IHistorialAcademicoService _HistorialAcademicoComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHistorialAcademicoService>();
                _HistorialAcademicoComponent.Delete(HistorialAcademico);
            }
        }

        public HistorialLaboral GetInformacionLaboralById(HistorialLaboralPk HistorialLaboralPk)
        {
            if (IsAuthorize(HistorialLaboralPk))
            {
                Acaweb.Componentes.Contracts.IHistorialLaboralService _HistorialLaboralComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHistorialLaboralService>();
                return _HistorialLaboralComponent.GetById(HistorialLaboralPk);
            }
            return null;
        }

        public HistorialAcademico GetInformacionAcademicaById(HistorialAcademicoPk HistorialAcademicoPk)
        {
            if (IsAuthorize(HistorialAcademicoPk))
            {
                Acaweb.Componentes.Contracts.IHistorialAcademicoService _HistorialAcademicoComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHistorialAcademicoService>();
                return _HistorialAcademicoComponent.GetById(HistorialAcademicoPk);
            }
            return null;
        }

        public List<HistorialAcademico> GetHistorialAcademicoByCodigoInterno(int CodigoInterno)
        {
            Acaweb.Componentes.Contracts.IHistorialAcademicoService _HistorialAcademicoComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHistorialAcademicoService>();
            return _HistorialAcademicoComponent.GetByCodigoInterno(CodigoInterno).ToList();
        }

        private bool IsAuthorize(int CodigoInterno)
        {
            Acaweb.Componentes.Contracts.IEstudiantesService _EstudianteComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IEstudiantesService>();
            Estudiantes Estudiante = _EstudianteComponent.GetByCodigoEstudiante(AuthenticationService.GetCurrent().ToInt());

            if (Estudiante != null)
            {
                return Estudiante.CodigoInterno == CodigoInterno;
            }
            else
            {
                int _CodigoInterno = _EgresadoComponent.GetByCodigo(AuthenticationService.GetCurrent().ToInt()).CodigoInterno;
                return _CodigoInterno == CodigoInterno;
            }
        }

        private bool IsAuthorize(HistorialAcademicoPk Pk)
        {
            return IsAuthorize(Pk.CodigoInterno);
        }

        private bool IsAuthorize(ManejoIdiomasPk Pk)
        {
            return IsAuthorize(Pk.CodigoInterno);
        }

        private bool IsAuthorize(HistorialLaboralPk Pk)
        {
            return IsAuthorize(Pk.CodigoInterno);
        }

        private bool IsAuthorize(HijosPk Pk)
        {
            return IsAuthorize(Pk.CodigoInterno);
        }

        public void AddHijos(Hijos Hijo)
        {
            if (IsAuthorize(Hijo.HijoPk))
            {
                Acaweb.Componentes.Contracts.IHijosService _HijosComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHijosService>();
                _HijosComponent.Create(Hijo);
            }
        }

        public void EditHijos(Hijos Hijo)
        {
            if (IsAuthorize(Hijo.HijoPk))
            {
                Acaweb.Componentes.Contracts.IHijosService _HijosComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHijosService>();
                _HijosComponent.Update(Hijo);
            }
        }

        public void DeleteHijos(HijosPk HijoPk)
        {
            if (IsAuthorize(HijoPk))
            {
                Acaweb.Componentes.Contracts.IHijosService _HijosComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHijosService>();
                _HijosComponent.Delete(HijoPk);
            }
        }

        public List<Hijos> GetHijosByCodigoInterno(int CodigoInterno)
        {
            if (IsAuthorize(CodigoInterno))
            {
                Acaweb.Componentes.Contracts.IHijosService _HijosComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IHijosService>();
                return _HijosComponent.GetByCodigoInterno(CodigoInterno).ToList();
            }

            return null;
        }

        public List<ManejoIdiomas> GetIdiomasByCodigoInterno(int CodigoInterno)
        {
            if (IsAuthorize(CodigoInterno))
            {
                Acaweb.Componentes.Contracts.IManejoIdiomasService _ManejoIdiomasComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IManejoIdiomasService>();
                return _ManejoIdiomasComponent.GetByCodigoInterno(CodigoInterno).ToList();
            }

            return null;
        }

        public void AddIdiomas(ManejoIdiomas Idioma)
        {
            if (IsAuthorize(Idioma.ManejoIdiomasPk))
            {
                Acaweb.Componentes.Contracts.IManejoIdiomasService _ManejoIdiomasComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IManejoIdiomasService>();
                _ManejoIdiomasComponent.Create(Idioma);
            }
        }

        public ManejoIdiomas GetIdiomaById(ManejoIdiomasPk Pk)
        {
            if (IsAuthorize(Pk))
            {
                Acaweb.Componentes.Contracts.IManejoIdiomasService _ManejoIdiomasComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IManejoIdiomasService>();
                return _ManejoIdiomasComponent.GetById(Pk);
            }
            return null;
        }

        public void EditIdiomas(ManejoIdiomas Idioma)
        {
            if (IsAuthorize(Idioma.ManejoIdiomasPk))
            {
                Acaweb.Componentes.Contracts.IManejoIdiomasService _ManejoIdiomasComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IManejoIdiomasService>();
                _ManejoIdiomasComponent.Update(Idioma);
            }
        }

        public void DeleteIdiomas(ManejoIdiomasPk Idioma)
        {
            if (IsAuthorize(Idioma))
            {
                Acaweb.Componentes.Contracts.IManejoIdiomasService _ManejoIdiomasComponent = AppCtx.Resolve<Acaweb.Componentes.Contracts.IManejoIdiomasService>();
                _ManejoIdiomasComponent.Delete(Idioma);
            }
        }
    }
}